﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using SqlDataAccess;

namespace QuanLyBanHang.HeThong
{
	public partial class F140_Danh_sach_nguoi_su_dung : Form
	{
		public F140_Danh_sach_nguoi_su_dung()
		{
			InitializeComponent();
			set_define_events();
		}

		#region Public Interfaces

		#endregion

		#region Members
		BKIQuanLyBanHangEntities db = new BKIQuanLyBanHangEntities();
		#endregion

		#region Private Methods
		private void set_define_events()
		{
			this.Load += F140_Danh_sach_nguoi_su_dung_Load;
			this.m_cmd_cap_nhat_nguoi_su_dung.Click += m_cmd_cap_nhat_Click;
			this.m_cmd_them_nguoi_su_dung.Click += m_cmd_them_Click;
			this.m_cmd_tim_kiem_tim_kiem_nguoi_su_dung.Click += m_cmd_tim_kiem_nguoi_su_dung_Click;
            this.m_cmd_xoa_nguoi_su_dung.Click += m_cmd_xoa_nguoi_su_dung_Click;
			this.m_cmd_xoa_trang.Click += m_cmd_xoa_trang_Click;
			this.m_grv.CellClick += m_grv_CellClick;
		}

		private void load_data_to_cbo_nhom_nguoi_dung()
		{
			var v_lst_nhom_nguoi_dung = db.HT_NHOM_NGUOI_DUNG
				.Select(x => new
				{
					ID = x.ID,
					TEN_NHOM = x.TEN_NHOM
				})
				.OrderBy(x => x.TEN_NHOM)
				.ToList();
			m_cbo_nhom_nguoi_dung.DataSource = v_lst_nhom_nguoi_dung;
			m_cbo_nhom_nguoi_dung.DisplayMember = "TEN_NHOM";
			m_cbo_nhom_nguoi_dung.ValueMember = "ID";
			
		}

		private bool check_validate_data_is_ok(string ip_form_mode)
		{
			if (string.IsNullOrWhiteSpace(m_txt_ma_nhan_vien.Text))
			{
				MessageBox.Show("Bạn phải nhập Mã nhân viên!");
				m_txt_ma_nhan_vien.Focus();
				return false;
			}
			//Kiểm tra các trường hợp trùng

			//Trường hợp thêm mới: Mã nhân viên phải khác với tất cả các Mã nhân viên đã có
			if (ip_form_mode.Equals("THEM"))
			{
				if (db.HT_NGUOI_SU_DUNG.Count(x => x.MA_NHAN_VIEN == m_txt_ma_nhan_vien.Text) > 0)
				{
					MessageBox.Show("Đã tồn tại Mã nhân viên này, bạn hãy nhập mã khác!", "Thông báo");
					m_txt_ma_nhan_vien.Focus();
					return false;
				}
			}
			//Trường hợp sửa: Mã nhân viên có thể giống 1 Mã đã có - Mã của chính nhân viên đó, và phải khác tất cả các mã còn lại
			if (ip_form_mode.Equals("SUA"))
			{
				decimal v_dc_id_nguoi_su_dung = (decimal)m_grv.CurrentRow.Cells[0].Value;
				string v_str_ma_cu = db.HT_NGUOI_SU_DUNG.FirstOrDefault(x => x.ID == v_dc_id_nguoi_su_dung).MA_NHAN_VIEN;
				//Nếu mã mới khác mã cũ
				if (!m_txt_ma_nhan_vien.Text.Equals(v_str_ma_cu))
				{
					//Nếu mà mã này giống với Mã nhân viên nào đó, thì báo lỗi
					if (db.HT_NGUOI_SU_DUNG.Count(x => x.MA_NHAN_VIEN == m_txt_ma_nhan_vien.Text
															|| x.MA_NHAN_VIEN != v_str_ma_cu) > 0)
					{
						MessageBox.Show("Đã tồn tại Mã nhân viên này, bạn hãy nhập mã khác!", "Thông báo");
						m_txt_ma_nhan_vien.Focus();
						return false;
					}
				}
			}

			if (string.IsNullOrWhiteSpace(m_txt_ho_ten.Text))
			{
				MessageBox.Show("Bạn phải nhập Họ tên!");
				m_txt_ho_ten.Focus();
				return false;
			}
			if (string.IsNullOrWhiteSpace(m_txt_tai_khoan.Text))
			{
				MessageBox.Show("Bạn phải nhập Tài khoản!");
				m_txt_tai_khoan.Focus();
				return false;
			}
			if (string.IsNullOrWhiteSpace(m_txt_mat_khau.Text))
			{
				MessageBox.Show("Bạn phải nhập Mật khẩu!");
				m_txt_mat_khau.Focus();
				return false;
			}
			if (string.IsNullOrWhiteSpace(m_txt_ngay_sinh.Text))
			{
				MessageBox.Show("Bạn phải nhập Ngày sinh dạng dd/MM/yyyy!");
				m_txt_ngay_sinh.Focus();
				return false;
			}
			//Kiem tra ngay nhap dinh dang dd/mm/yyyy
			DateTime v_dat_ngay_sinh;
			if (!DateTime.TryParseExact(m_txt_ngay_sinh.Text, "dd/MM/yyyy", null, System.Globalization.DateTimeStyles.None, out v_dat_ngay_sinh))
			{
				MessageBox.Show("Bạn phải nhập Ngày sinh dạng dd/MM/yyyy!");
				m_txt_ngay_sinh.Focus();
				return false;
			}
			if (string.IsNullOrWhiteSpace(m_txt_gioi_tinh.Text))
			{
				MessageBox.Show("Bạn phải nhập Giới tính!");
				m_txt_gioi_tinh.Focus();
				return false;
			}
			if (string.IsNullOrWhiteSpace(m_txt_dia_chi.Text))
			{
				MessageBox.Show("Bạn phải nhập Địa chỉ!");
				m_txt_dia_chi.Focus();
				return false;
			}
			if (string.IsNullOrWhiteSpace(m_txt_dien_thoai.Text))
			{
				MessageBox.Show("Bạn phải nhập Số điện thoại!");
				m_txt_dien_thoai.Focus();
				return false;
			}

			return true;
		}

		private void load_data_to_grid()
		{
			var v_lst_nguoi_su_dung = db.HT_NGUOI_SU_DUNG
				.Where(x => x.HO_TEN_NHAN_VIEN.Contains(m_txt_tu_khoa.Text)
							|| x.MA_NHAN_VIEN.Contains(m_txt_tu_khoa.Text)
							|| x.DIA_CHI.Contains(m_txt_tu_khoa.Text)
							|| x.EMAIL.Contains(m_txt_tu_khoa.Text)
				)
				.Select(x => new
				{
					ID = x.ID,
					NHOM_NGUOI_DUNG=x.HT_NHOM_NGUOI_DUNG.TEN_NHOM,
					MA_NHAN_VIEN = x.MA_NHAN_VIEN,
					HO_VA_TEN = x.HO_TEN_NHAN_VIEN,
					TAI_KHOAN = x.USER_NAME,
					NGAY_SINH = x.NGAY_SINH,
					GIOI_TINH = x.GIOI_TINH,
					DIA_CHI = x.DIA_CHI,
					DIEN_THOAI = x.DIEN_THOAI,
					EMAIL = x.EMAIL,
					FACEBOOK = x.FACEBOOK
				})
				.ToList();
			m_grv.DataSource = v_lst_nguoi_su_dung;
			m_grv.Columns[0].HeaderText = "ID";
			m_grv.Columns[0].Width = 20;
			m_grv.Columns[0].Visible = false;
			m_grv.Columns[1].HeaderText = "Nhóm người dùng";
			m_grv.Columns[2].HeaderText = "Mã nhân viên";
			m_grv.Columns[2].Width = 60;
			m_grv.Columns[3].HeaderText = "Họ tên";
			m_grv.Columns[3].Width = 100;
			m_grv.Columns[4].HeaderText = "Tài khoản";
			m_grv.Columns[4].Width = 100;
			m_grv.Columns[5].HeaderText = "Ngày sinh";
			m_grv.Columns[5].Width = 60;
			m_grv.Columns[6].HeaderText = "Giới tính";
			m_grv.Columns[7].HeaderText = "Địa chỉ";
			m_grv.Columns[7].Width = 150;
			m_grv.Columns[8].HeaderText = "Điện thoại";
			m_grv.Columns[8].Width = 60;
			m_grv.Columns[9].HeaderText = "Email";
			m_grv.Columns[9].Width = 60;
			m_grv.Columns[10].HeaderText = "Facebook";
			m_grv.Columns[10].Width = 60;
		}

		#endregion

		#region Events
        void m_cmd_xoa_trang_Click(object sender, EventArgs e)
		{
			try
			{
				m_txt_dia_chi.Text = "";
				m_txt_dien_thoai.Text = "";
				m_txt_email.Text = "";
				m_txt_facebook.Text = "";
				m_txt_gioi_tinh.Text = "";
				m_txt_ho_ten.Text = "";
				m_txt_ma_nhan_vien.Text = "";
				m_txt_mat_khau.Text = "";
				m_txt_ngay_sinh.Text = "";
				m_txt_tai_khoan.Text = "";
			}
			catch (Exception v_e)
			{
				MessageBox.Show(v_e.ToString());
			}
		}

        void m_cmd_them_Click(object sender, EventArgs e)
		{
			try
			{
				if (check_validate_data_is_ok("THEM"))
				{
					HT_NGUOI_SU_DUNG v_ht_nguoi_dung = new HT_NGUOI_SU_DUNG();
					v_ht_nguoi_dung.ID_NHOM_NGUOI_DUNG = Convert.ToDecimal(m_cbo_nhom_nguoi_dung.SelectedValue);
					v_ht_nguoi_dung.DIA_CHI = m_txt_dia_chi.Text.Trim();
					v_ht_nguoi_dung.DIEN_THOAI = Convert.ToDecimal(m_txt_dien_thoai.Text.Trim());
					v_ht_nguoi_dung.EMAIL = m_txt_email.Text.Trim();
					v_ht_nguoi_dung.FACEBOOK = m_txt_facebook.Text.Trim();
					v_ht_nguoi_dung.GIOI_TINH = m_txt_gioi_tinh.Text.Trim();
					v_ht_nguoi_dung.HO_TEN_NHAN_VIEN = m_txt_ho_ten.Text.Trim();
					v_ht_nguoi_dung.MA_NHAN_VIEN = m_txt_ma_nhan_vien.Text.Trim();
					DateTime v_dat_ngay_sinh;
					DateTime.TryParseExact(m_txt_ngay_sinh.Text, "dd/MM/yyyy", null, System.Globalization.DateTimeStyles.None, out v_dat_ngay_sinh);
					v_ht_nguoi_dung.NGAY_SINH = v_dat_ngay_sinh;
					v_ht_nguoi_dung.PASSWORD = m_txt_mat_khau.Text;
					v_ht_nguoi_dung.USER_NAME = m_txt_tai_khoan.Text;
					db.HT_NGUOI_SU_DUNG.Add(v_ht_nguoi_dung);
					db.SaveChanges();
					m_cmd_xoa_trang_Click(null, null);
					MessageBox.Show("Bạn đã thêm mới Người dùng thành công!", "Thông báo");
					load_data_to_grid();
				}
			}
			catch (Exception v_e)
			{
				MessageBox.Show(v_e.ToString());
			}
		}

        void m_cmd_cap_nhat_Click(object sender, EventArgs e)
		{
			try
			{
				if (m_grv.CurrentRow == null) return;
				decimal id_nguoi_su_dung = (decimal)m_grv.CurrentRow.Cells[0].Value;//id
				HT_NGUOI_SU_DUNG v_ht_nguoi_dung = db.HT_NGUOI_SU_DUNG.FirstOrDefault(x => x.ID == id_nguoi_su_dung);
				if (v_ht_nguoi_dung != null)
				{
					if (check_validate_data_is_ok("SUA"))
					{
						v_ht_nguoi_dung.ID_NHOM_NGUOI_DUNG = Convert.ToDecimal(m_cbo_nhom_nguoi_dung.SelectedValue);
						v_ht_nguoi_dung.DIA_CHI = m_txt_dia_chi.Text.Trim();
						v_ht_nguoi_dung.DIEN_THOAI = Convert.ToDecimal(m_txt_dien_thoai.Text.Trim());
						v_ht_nguoi_dung.EMAIL = m_txt_email.Text.Trim();
						v_ht_nguoi_dung.FACEBOOK = m_txt_facebook.Text.Trim();
						v_ht_nguoi_dung.GIOI_TINH = m_txt_gioi_tinh.Text.Trim();
						v_ht_nguoi_dung.HO_TEN_NHAN_VIEN = m_txt_ho_ten.Text.Trim();
						v_ht_nguoi_dung.MA_NHAN_VIEN = m_txt_ma_nhan_vien.Text.Trim();
						DateTime v_dat_ngay_sinh;
						DateTime.TryParseExact(m_txt_ngay_sinh.Text, "dd/MM/yyyy", null, System.Globalization.DateTimeStyles.None, out v_dat_ngay_sinh);
						v_ht_nguoi_dung.NGAY_SINH = v_dat_ngay_sinh;
						v_ht_nguoi_dung.PASSWORD = m_txt_mat_khau.Text;
						v_ht_nguoi_dung.USER_NAME = m_txt_tai_khoan.Text;
						db.SaveChanges();
						m_cmd_xoa_trang_Click(null, null);
						MessageBox.Show("Bạn đã cập nhật thông tin thành công!", "Thông báo");
						load_data_to_grid();
					}
				}
			}
			catch (Exception v_e)
			{
				MessageBox.Show(v_e.ToString());
			}
		}

		void m_grv_CellClick(object sender, DataGridViewCellEventArgs e)
		{
			try
			{
				decimal id_nguoi_su_dung = (decimal)m_grv.CurrentRow.Cells[0].Value;//id
				HT_NGUOI_SU_DUNG v_ht_nguoi_dung = db.HT_NGUOI_SU_DUNG.FirstOrDefault(x => x.ID == id_nguoi_su_dung);
				if (v_ht_nguoi_dung != null)
				{
					m_cbo_nhom_nguoi_dung.Text = v_ht_nguoi_dung.HT_NHOM_NGUOI_DUNG.TEN_NHOM;
					m_txt_ma_nhan_vien.Text = v_ht_nguoi_dung.MA_NHAN_VIEN;
					m_txt_dia_chi.Text = v_ht_nguoi_dung.DIA_CHI;
					m_txt_dien_thoai.Text = v_ht_nguoi_dung.DIEN_THOAI.ToString();
					m_txt_email.Text = v_ht_nguoi_dung.EMAIL;
					m_txt_facebook.Text = v_ht_nguoi_dung.FACEBOOK;
					m_txt_gioi_tinh.Text = v_ht_nguoi_dung.GIOI_TINH;
					m_txt_ho_ten.Text = v_ht_nguoi_dung.HO_TEN_NHAN_VIEN;
					if (v_ht_nguoi_dung.NGAY_SINH != null)
					{
						m_txt_ngay_sinh.Text = v_ht_nguoi_dung.NGAY_SINH.Value.ToString("dd/MM/yyyy");
					}

					m_txt_mat_khau.Text = v_ht_nguoi_dung.PASSWORD;
					m_txt_tai_khoan.Text = v_ht_nguoi_dung.USER_NAME;
				}
			}
			catch (Exception v_e)
			{
				MessageBox.Show(v_e.ToString());
			}
		}

		void m_cmd_xoa_nguoi_su_dung_Click(object sender, EventArgs e)
		{
			try
			{
				if (m_grv.CurrentRow == null)
				{
					MessageBox.Show("Bạn hãy chọn Người dùng muốn xoá!", "Thông báo!");
					return;
				}
				decimal id_nguoi_su_dung = (decimal)m_grv.CurrentRow.Cells[0].Value;//id
				var v_nguoi_su_dung = db.HT_NGUOI_SU_DUNG.FirstOrDefault(x => x.ID == id_nguoi_su_dung);
				if (v_nguoi_su_dung != null)
				{
					if (MessageBox.Show(@"Bạn có chắc chắn muốn xoá Người dùng này không?", "Cảnh báo", MessageBoxButtons.YesNo) == DialogResult.Yes)
					{
						db.HT_NGUOI_SU_DUNG.Remove(v_nguoi_su_dung);
						db.SaveChanges();
						MessageBox.Show("Bạn đã xoá thành công người dùng này!", "Thông báo");
						load_data_to_grid();
					}
				}
			}
			catch (Exception v_e)
			{
				MessageBox.Show(v_e.ToString());
			}
		}

        void m_cmd_tim_kiem_nguoi_su_dung_Click(object sender, EventArgs e)
		{
			try
			{
				load_data_to_grid();
			}
			catch (Exception v_e)
			{
				MessageBox.Show(v_e.ToString());
			}
		}

		void F140_Danh_sach_nguoi_su_dung_Load(object sender, EventArgs e)
		{
			try
			{
				load_data_to_cbo_nhom_nguoi_dung();
				load_data_to_grid();
			}
			catch (Exception v_e)
			{
				MessageBox.Show(v_e.ToString());
			}
		}

        private void m_cmd_quay_lai_Click(object sender, EventArgs e)
        {
            this.Close();
        }

		#endregion
	}
}
